package com.demo.calendardemo;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo {

    //注意：month是从0开始的，而月份是从1开始的，所以month需要加一。
    /*日历字段包含以下两种：一种是表示时间的单位，例如年、月、日等等。另一种是具体的日期，例如一月、二月、三月、一日、二日、三日、一点钟、两点钟等等具体的时间。前一种一般时获取的时候使用，后一种一般判断的时候使用。

    时间单位字段：
    YEAR	年
    MINUTE	分
    DAY_OF_WEEK_IN_MONTH 某月中第几周
    MONTH	月
    SECOND/MILLISECOND	秒/毫秒
    WEEK_OF_MONTH	日历式的第几周
    DATE 	日
    DAY_OF_MONTH 和DATE一样
    DAY_OF_YEAR	一年的第多少天
    HOUR_OF_DAY	时
    DAY_OF_WEEK	周几
    WEEK_OF_YEAR	一年的第多少周
    特殊的：AM_PM 返回1则表示是下午，返回0表示上午。
    原文链接：https://blog.csdn.net/ytasdfg/article/details/81086118
    static Calendar getInstance()

使用默认时区和区域设置获取日历。通过该方法生成Calendar对象。如下所示：Calendar cr=Calendar.getInstance()；
public void set(int year,int month,int date,int hourofday,int minute,int second)	设置日历的年、月、日、时、分、秒。
public int get(int field)	返回给定日历字段的值。所谓字段就是年、月、日等等。
public void setTime(Date date)	使用给定的Date设置此日历的时间。Date------Calendar
public Date getTime()	返回一个Date表示此日历的时间。Calendar-----Date
abstract void add(int field,int amount)	按照日历的规则，给指定字段添加或减少时间量。
public long getTimeInMillies()	以毫秒为单位返回该日历的时间值。

原文链接：https://blog.csdn.net/ytasdfg/article/details/81086118
    */

/*    public static void main(String[] args) {
        // 其日历字段已由当前日期和时间初始化：
        Calendar rightNow = Calendar.getInstance(); // 子类对象
        // 获取年
        int year = rightNow.get(Calendar.YEAR);
        // 获取月
        int month = rightNow.get(Calendar.MONTH);
        // 获取日
        int date = rightNow.get(Calendar.DATE);
        //获取几点
        int hour = rightNow.get(Calendar.HOUR_OF_DAY);
        //获取上午下午
        int moa = rightNow.get(Calendar.AM_PM);
        if (moa == 1)
            System.out.println("下午");
        else
            System.out.println("上午");

        System.out.println(year + "年" + (month + 1) + "月" + date + "日" + hour + "时");
        rightNow.add(Calendar.YEAR, 5);
        rightNow.add(Calendar.DATE, -10);
        int year1 = rightNow.get(Calendar.YEAR);
        int date1 = rightNow.get(Calendar.DATE);
        System.out.println(year1 + "年" + (month + 1) + "月" + date1 + "日" + hour + "时");
    }*/

    public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
        String yearMonth = simpleDateFormat.format(new Date());
        String year = yearMonth.substring(0, 4);
        String month = yearMonth.substring(5, 7);
        int intMonth = Integer.parseInt(month);
        int quarter = intMonth % 3 == 0 ? intMonth/3 : intMonth/3+1;
        System.out.println(quarter);
        System.out.println(getSeasonStartDate(new Date()));
        System.out.println("++=="+getLastDayOfQuarter(new Date()));
    }


    /**
     * 计算某日期所在季度结束日期
     * 季度划分：1、2、3， 4、5、6， 7、8、9， 10、11、12
     */
    public static String getSeasonStartDate (Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month);
        calendar.set(Calendar.MONTH, month / 3 * 3);
        calendar.set(Calendar.DATE, 1);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(calendar.getTime());

    }

    public static Date getLastDayOfQuarter(Date date) {

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(date);

        return getLastDayOfQuarter(calendar.get(Calendar.YEAR), getQuarterOfYear(date));

    }

    public static Date getLastDayOfQuarter(Integer year, Integer quarter) {

        Calendar calendar = Calendar.getInstance();

        Integer month = new Integer(0);

        if (quarter == 1) {

            month = 3 - 1;

        } else if (quarter == 2) {

            month = 6 - 1;

        } else if (quarter == 3) {

            month = 9 - 1;

        } else if (quarter == 4) {

            month = 12 - 1;

        } else {

            month = calendar.get(Calendar.MONTH);

        }

       // return getLastDayOfMonth(year, month);
        return null;

    }

    /**

     * 返回指定日期的月的最后一天

     *


     */

    public static Date getLastDayOfMonth(Date date) {

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(date);

        calendar.set(calendar.get(Calendar.YEAR),

                calendar.get(Calendar.MONTH), 1);

        calendar.roll(Calendar.DATE, -1);

        return calendar.getTime();

    }


    /**

     * 返回指定日期的季度

     *

     * @param date

     * @return

     */

    public static int getQuarterOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) / 3 + 1;

    }
//    原文链接：https://blog.csdn.net/weixin_39924307/article/details/114087766
//    原文链接：https://blog.csdn.net/weixin_39924307/article/details/114087766
//    原文链接：https://blog.csdn.net/weixin_43474476/article/details/123001897
}
